totaly binary incomnpatible change:
authorTim Janik <timj@gtk.org>
Tue, 7 Jul 1998 01:25:27 +0000 (01:25 +0000)
committerTim Janik <timj@src.gnome.org>
Tue, 7 Jul 1998 01:25:27 +0000 (01:25 +0000)
Mon Jul  6 18:30:48 1998  Tim Janik  <timj@gtk.org>

        * gtk/gtkbutton.h:
        * gtk/gtkbutton.c: GtkButtons are now derived from GtkBin. we mirror
        GTK_BIN (button)->child to button->child to keep source compatibility.

        * gtk/gtkoptionmenu.c:
        * gtk/gtkclist.c:
        * gtkcheckbutton.c: don't refer to button->child, but
        GTK_BIN (button)->child instead.

14 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
TODO
gtk/gtkbin.c
gtk/gtkbutton.c
gtk/gtkbutton.h
gtk/gtkcheckbutton.c
gtk/gtkclist.c
gtk/gtkoptionmenu.c

index 709cb437237ad9f82814ae84c8c3df50d8e92414..4d9904898ac033ea3f90053b365adf39f19d1e5c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Mon Jul  6 18:30:48 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkbutton.h:
+       * gtk/gtkbutton.c: GtkButtons are now derived from GtkBin. we mirror
+       GTK_BIN (button)->child to button->child to keep source compatibility.
+
+       * gtk/gtkoptionmenu.c:
+       * gtk/gtkclist.c:
+       * gtkcheckbutton.c: don't refer to button->child, but
+       GTK_BIN (button)->child instead.
+
 Mon Jul  6 12:06:23 BST 1998  Tony Gale  <gale@gtk.org>
 
        * docs/gtkfaq.sgml: update anon CVS info
index 709cb437237ad9f82814ae84c8c3df50d8e92414..4d9904898ac033ea3f90053b365adf39f19d1e5c 100644 (file)
@@ -1,3 +1,14 @@
+Mon Jul  6 18:30:48 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkbutton.h:
+       * gtk/gtkbutton.c: GtkButtons are now derived from GtkBin. we mirror
+       GTK_BIN (button)->child to button->child to keep source compatibility.
+
+       * gtk/gtkoptionmenu.c:
+       * gtk/gtkclist.c:
+       * gtkcheckbutton.c: don't refer to button->child, but
+       GTK_BIN (button)->child instead.
+
 Mon Jul  6 12:06:23 BST 1998  Tony Gale  <gale@gtk.org>
 
        * docs/gtkfaq.sgml: update anon CVS info
index 709cb437237ad9f82814ae84c8c3df50d8e92414..4d9904898ac033ea3f90053b365adf39f19d1e5c 100644 (file)
@@ -1,3 +1,14 @@
+Mon Jul  6 18:30:48 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkbutton.h:
+       * gtk/gtkbutton.c: GtkButtons are now derived from GtkBin. we mirror
+       GTK_BIN (button)->child to button->child to keep source compatibility.
+
+       * gtk/gtkoptionmenu.c:
+       * gtk/gtkclist.c:
+       * gtkcheckbutton.c: don't refer to button->child, but
+       GTK_BIN (button)->child instead.
+
 Mon Jul  6 12:06:23 BST 1998  Tony Gale  <gale@gtk.org>
 
        * docs/gtkfaq.sgml: update anon CVS info
index 709cb437237ad9f82814ae84c8c3df50d8e92414..4d9904898ac033ea3f90053b365adf39f19d1e5c 100644 (file)
@@ -1,3 +1,14 @@
+Mon Jul  6 18:30:48 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkbutton.h:
+       * gtk/gtkbutton.c: GtkButtons are now derived from GtkBin. we mirror
+       GTK_BIN (button)->child to button->child to keep source compatibility.
+
+       * gtk/gtkoptionmenu.c:
+       * gtk/gtkclist.c:
+       * gtkcheckbutton.c: don't refer to button->child, but
+       GTK_BIN (button)->child instead.
+
 Mon Jul  6 12:06:23 BST 1998  Tony Gale  <gale@gtk.org>
 
        * docs/gtkfaq.sgml: update anon CVS info
index 709cb437237ad9f82814ae84c8c3df50d8e92414..4d9904898ac033ea3f90053b365adf39f19d1e5c 100644 (file)
@@ -1,3 +1,14 @@
+Mon Jul  6 18:30:48 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkbutton.h:
+       * gtk/gtkbutton.c: GtkButtons are now derived from GtkBin. we mirror
+       GTK_BIN (button)->child to button->child to keep source compatibility.
+
+       * gtk/gtkoptionmenu.c:
+       * gtk/gtkclist.c:
+       * gtkcheckbutton.c: don't refer to button->child, but
+       GTK_BIN (button)->child instead.
+
 Mon Jul  6 12:06:23 BST 1998  Tony Gale  <gale@gtk.org>
 
        * docs/gtkfaq.sgml: update anon CVS info
index 709cb437237ad9f82814ae84c8c3df50d8e92414..4d9904898ac033ea3f90053b365adf39f19d1e5c 100644 (file)
@@ -1,3 +1,14 @@
+Mon Jul  6 18:30:48 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkbutton.h:
+       * gtk/gtkbutton.c: GtkButtons are now derived from GtkBin. we mirror
+       GTK_BIN (button)->child to button->child to keep source compatibility.
+
+       * gtk/gtkoptionmenu.c:
+       * gtk/gtkclist.c:
+       * gtkcheckbutton.c: don't refer to button->child, but
+       GTK_BIN (button)->child instead.
+
 Mon Jul  6 12:06:23 BST 1998  Tony Gale  <gale@gtk.org>
 
        * docs/gtkfaq.sgml: update anon CVS info
index 709cb437237ad9f82814ae84c8c3df50d8e92414..4d9904898ac033ea3f90053b365adf39f19d1e5c 100644 (file)
@@ -1,3 +1,14 @@
+Mon Jul  6 18:30:48 1998  Tim Janik  <timj@gtk.org>
+
+       * gtk/gtkbutton.h:
+       * gtk/gtkbutton.c: GtkButtons are now derived from GtkBin. we mirror
+       GTK_BIN (button)->child to button->child to keep source compatibility.
+
+       * gtk/gtkoptionmenu.c:
+       * gtk/gtkclist.c:
+       * gtkcheckbutton.c: don't refer to button->child, but
+       GTK_BIN (button)->child instead.
+
 Mon Jul  6 12:06:23 BST 1998  Tony Gale  <gale@gtk.org>
 
        * docs/gtkfaq.sgml: update anon CVS info
diff --git a/TODO b/TODO
index a8a16219967f2843dd89251a25c44d2a96420710..1648429b774d225d380985ae597641cdc148e83d 100644 (file)
--- a/TODO
+++ b/TODO
@@ -206,9 +206,6 @@ Additions:
    cause confusing presses to be sent to containers that actually
    want to get events on themselves.
 
- * Buttons's should derive from Bin's. (GTK 2.0 change, breaks
-   lots of stuff)
-
  * New signals to handle accelerators: accel_before and accel_after (or
    somesuch) to pre and post process accelerator calls. [Yosh]
 
index 392c160de80be2656ac15f3f6e794f4809dc037b..4c3972bdfcc8a6138885d98816c73746947c1f64 100644 (file)
@@ -203,61 +203,61 @@ gtk_bin_expose (GtkWidget      *widget,
 
 static void
 gtk_bin_add (GtkContainer *container,
-            GtkWidget    *widget)
+            GtkWidget    *child)
 {
   GtkBin *bin;
 
   g_return_if_fail (container != NULL);
   g_return_if_fail (GTK_IS_BIN (container));
-  g_return_if_fail (widget != NULL);
+  g_return_if_fail (child != NULL);
+  g_return_if_fail (GTK_IS_WIDGET (child));
 
   bin = GTK_BIN (container);
   g_return_if_fail (bin->child == NULL);
 
-  gtk_widget_set_parent (widget, GTK_WIDGET (container));
-  
-  if (GTK_WIDGET_VISIBLE (widget->parent))
+  gtk_widget_set_parent (child, GTK_WIDGET (bin));
+  bin->child = child;
+
+  if (GTK_WIDGET_VISIBLE (child->parent))
     {
-      if (GTK_WIDGET_REALIZED (widget->parent) &&
-         !GTK_WIDGET_REALIZED (widget))
-       gtk_widget_realize (widget);
+      if (GTK_WIDGET_REALIZED (child->parent) &&
+         !GTK_WIDGET_REALIZED (child))
+       gtk_widget_realize (child);
       
-      if (GTK_WIDGET_MAPPED (widget->parent) &&
-         !GTK_WIDGET_MAPPED (widget))
-       gtk_widget_map (widget);
+      if (GTK_WIDGET_MAPPED (child->parent) &&
+         !GTK_WIDGET_MAPPED (child))
+       gtk_widget_map (child);
     }
   
-  bin->child = widget;
-  
-  if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (container))
-    gtk_widget_queue_resize (widget);
+  if (GTK_WIDGET_VISIBLE (child) && GTK_WIDGET_VISIBLE (container))
+    gtk_widget_queue_resize (child);
 }
 
 static void
 gtk_bin_remove (GtkContainer *container,
-               GtkWidget    *widget)
+               GtkWidget    *child)
 {
   GtkBin *bin;
+  gboolean widget_was_visible;
 
   g_return_if_fail (container != NULL);
   g_return_if_fail (GTK_IS_BIN (container));
-  g_return_if_fail (widget != NULL);
+  g_return_if_fail (child != NULL);
+  g_return_if_fail (GTK_IS_WIDGET (child));
 
   bin = GTK_BIN (container);
+  g_return_if_fail (bin->child == child);
 
-  if (bin->child == widget)
-    {
-      gboolean widget_was_visible = GTK_WIDGET_VISIBLE (widget);
-
-      gtk_widget_unparent (widget);
-      bin->child = NULL;
-
-      /* queue resize regardless of GTK_WIDGET_VISIBLE (container),
-       * since that's what is needed by toplevels, which derive from GtkBin.
-       */
-      if (widget_was_visible)
-        gtk_widget_queue_resize (GTK_WIDGET (container));
-    }
+  widget_was_visible = GTK_WIDGET_VISIBLE (child);
+  
+  gtk_widget_unparent (child);
+  bin->child = NULL;
+  
+  /* queue resize regardless of GTK_WIDGET_VISIBLE (container),
+   * since that's what is needed by toplevels, which derive from GtkBin.
+   */
+  if (widget_was_visible)
+    gtk_widget_queue_resize (GTK_WIDGET (container));
 }
 
 static void
index 2b8cfd3c4fff3041377004ab256020e117917fbd..101ee0d7dafdad6cd80b5eff3e46c5dd630d542e 100644 (file)
@@ -52,8 +52,6 @@ static void gtk_button_set_arg        (GtkObject        *object,
 static void gtk_button_get_arg        (GtkObject        *object,
                                       GtkArg           *arg,
                                       guint             arg_id);
-static void gtk_button_map            (GtkWidget        *widget);
-static void gtk_button_unmap          (GtkWidget        *widget);
 static void gtk_button_realize        (GtkWidget        *widget);
 static void gtk_button_size_request   (GtkWidget        *widget,
                                       GtkRequisition   *requisition);
@@ -83,9 +81,6 @@ static void gtk_button_add            (GtkContainer     *container,
                                       GtkWidget        *widget);
 static void gtk_button_remove         (GtkContainer     *container,
                                       GtkWidget        *widget);
-static void gtk_button_foreach        (GtkContainer     *container,
-                                      GtkCallback       callback,
-                                      gpointer          callback_data);
 static void gtk_real_button_pressed   (GtkButton        *button);
 static void gtk_real_button_released  (GtkButton        *button);
 static void gtk_real_button_enter     (GtkButton        *button);
@@ -93,7 +88,7 @@ static void gtk_real_button_leave     (GtkButton        *button);
 static GtkType gtk_button_child_type  (GtkContainer     *container);
 
 
-static GtkContainerClass *parent_class;
+static GtkBinClass *parent_class = NULL;
 static guint button_signals[LAST_SIGNAL] = { 0 };
 
 
@@ -116,7 +111,7 @@ gtk_button_get_type (void)
        (GtkClassInitFunc) NULL,
       };
 
-      button_type = gtk_type_unique (gtk_container_get_type (), &button_info);
+      button_type = gtk_type_unique (GTK_TYPE_BIN, &button_info);
       gtk_type_set_chunk_alloc (button_type, 16);
     }
 
@@ -134,7 +129,7 @@ gtk_button_class_init (GtkButtonClass *klass)
   widget_class = (GtkWidgetClass*) klass;
   container_class = (GtkContainerClass*) klass;
 
-  parent_class = gtk_type_class (gtk_container_get_type ());
+  parent_class = gtk_type_class (GTK_TYPE_BIN);
 
   gtk_object_add_arg_type ("GtkButton::label", GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_LABEL);
 
@@ -180,8 +175,6 @@ gtk_button_class_init (GtkButtonClass *klass)
   object_class->get_arg = gtk_button_get_arg;
 
   widget_class->activate_signal = button_signals[CLICKED];
-  widget_class->map = gtk_button_map;
-  widget_class->unmap = gtk_button_unmap;
   widget_class->realize = gtk_button_realize;
   widget_class->draw = gtk_button_draw;
   widget_class->draw_focus = gtk_button_draw_focus;
@@ -198,7 +191,6 @@ gtk_button_class_init (GtkButtonClass *klass)
 
   container_class->add = gtk_button_add;
   container_class->remove = gtk_button_remove;
-  container_class->foreach = gtk_button_foreach;
   container_class->child_type = gtk_button_child_type;
 
   klass->pressed = gtk_real_button_pressed;
@@ -212,6 +204,7 @@ static void
 gtk_button_init (GtkButton *button)
 {
   GTK_WIDGET_SET_FLAGS (button, GTK_CAN_FOCUS);
+  GTK_WIDGET_UNSET_FLAGS (button, GTK_NO_WINDOW);
 
   button->child = NULL;
   button->in_button = FALSE;
@@ -222,7 +215,7 @@ gtk_button_init (GtkButton *button)
 static GtkType
 gtk_button_child_type  (GtkContainer     *container)
 {
-  if (!GTK_BUTTON (container)->child)
+  if (!GTK_BIN (container)->child)
     return GTK_TYPE_WIDGET;
   else
     return GTK_TYPE_NONE;
@@ -242,11 +235,8 @@ gtk_button_set_arg (GtkObject *object,
       GtkWidget *label;
 
     case ARG_LABEL:
-      if (button->child)
-       {
-         gtk_widget_unparent (button->child);
-         button->child = NULL;
-       }
+      if (GTK_BIN (button)->child)
+       gtk_container_remove (GTK_CONTAINER (button), GTK_BIN (button)->child);
 
       label = gtk_label_new (GTK_VALUE_STRING(*arg) ? GTK_VALUE_STRING(*arg) : "");
       gtk_widget_show (label);
@@ -270,8 +260,8 @@ gtk_button_get_arg (GtkObject *object,
   switch (arg_id)
     {
     case ARG_LABEL:
-      if (button->child && GTK_IS_LABEL (button->child))
-       GTK_VALUE_STRING (*arg) = g_strdup (GTK_LABEL (button->child)->label);
+      if (GTK_BIN (button)->child && GTK_IS_LABEL (GTK_BIN (button)->child))
+       GTK_VALUE_STRING (*arg) = g_strdup (GTK_LABEL (GTK_BIN (button)->child)->label);
       else
        GTK_VALUE_STRING (*arg) = NULL;
       break;
@@ -352,35 +342,6 @@ gtk_button_get_relief(GtkButton *button)
   return button->relief;
 }
 
-static void
-gtk_button_map (GtkWidget *widget)
-{
-  GtkButton *button;
-
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_BUTTON (widget));
-
-  GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
-  gdk_window_show (widget->window);
-
-  button = GTK_BUTTON (widget);
-
-  if (button->child &&
-      GTK_WIDGET_VISIBLE (button->child) &&
-      !GTK_WIDGET_MAPPED (button->child))
-    gtk_widget_map (button->child);
-}
-
-static void
-gtk_button_unmap (GtkWidget *widget)
-{
-  g_return_if_fail (widget != NULL);
-  g_return_if_fail (GTK_IS_BUTTON (widget));
-
-  GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
-  gdk_window_hide (widget->window);
-}
-
 static void
 gtk_button_realize (GtkWidget *widget)
 {
@@ -446,12 +407,12 @@ gtk_button_size_request (GtkWidget      *widget,
                              DEFAULT_SPACING);
     }
 
-  if (button->child && GTK_WIDGET_VISIBLE (button->child))
+  if (GTK_BIN (button)->child && GTK_WIDGET_VISIBLE (GTK_BIN (button)->child))
     {
-      gtk_widget_size_request (button->child, &button->child->requisition);
+      gtk_widget_size_request (GTK_BIN (button)->child, &GTK_BIN (button)->child->requisition);
 
-      requisition->width += button->child->requisition.width;
-      requisition->height += button->child->requisition.height;
+      requisition->width += GTK_BIN (button)->child->requisition.width;
+      requisition->height += GTK_BIN (button)->child->requisition.height;
     }
 }
 
@@ -479,7 +440,7 @@ gtk_button_size_allocate (GtkWidget     *widget,
 
   button = GTK_BUTTON (widget);
 
-  if (button->child && GTK_WIDGET_VISIBLE (button->child))
+  if (GTK_BIN (button)->child && GTK_WIDGET_VISIBLE (GTK_BIN (button)->child))
     {
       child_allocation.x = (CHILD_SPACING + GTK_WIDGET (widget)->style->klass->xthickness);
       child_allocation.y = (CHILD_SPACING + GTK_WIDGET (widget)->style->klass->ythickness);
@@ -501,7 +462,7 @@ gtk_button_size_allocate (GtkWidget     *widget,
                                         (GTK_WIDGET (widget)->style->klass->xthickness * 2 + DEFAULT_SPACING));
        }
 
-      gtk_widget_size_allocate (button->child, &child_allocation);
+      gtk_widget_size_allocate (GTK_BIN (button)->child, &child_allocation);
     }
 }
 
@@ -646,8 +607,8 @@ gtk_button_draw (GtkWidget    *widget,
 
       gtk_button_paint (widget, &tmp_area);
 
-      if (button->child && gtk_widget_intersect (button->child, &tmp_area, &child_area))
-       gtk_widget_draw (button->child, &child_area);
+      if (GTK_BIN (button)->child && gtk_widget_intersect (GTK_BIN (button)->child, &tmp_area, &child_area))
+       gtk_widget_draw (GTK_BIN (button)->child, &child_area);
 
       gtk_widget_draw_default (widget);
       gtk_widget_draw_focus (widget);
@@ -785,9 +746,9 @@ gtk_button_expose (GtkWidget      *widget,
       gtk_button_paint (widget, &event->area);
 
       child_event = *event;
-      if (button->child && GTK_WIDGET_NO_WINDOW (button->child) &&
-         gtk_widget_intersect (button->child, &event->area, &child_event.area))
-       gtk_widget_event (button->child, (GdkEvent*) &child_event);
+      if (GTK_BIN (button)->child && GTK_WIDGET_NO_WINDOW (GTK_BIN (button)->child) &&
+         gtk_widget_intersect (GTK_BIN (button)->child, &event->area, &child_event.area))
+       gtk_widget_event (GTK_BIN (button)->child, (GdkEvent*) &child_event);
 
       gtk_widget_draw_default (widget);
       gtk_widget_draw_focus (widget);
@@ -925,78 +886,26 @@ static void
 gtk_button_add (GtkContainer *container,
                GtkWidget    *widget)
 {
-  GtkButton *button;
-
   g_return_if_fail (container != NULL);
-  g_return_if_fail (GTK_IS_BUTTON (container));
   g_return_if_fail (widget != NULL);
-  g_return_if_fail (gtk_widget_basic (widget));
-
-  button = GTK_BUTTON (container);
 
-  if (!button->child)
-    {
-      gtk_widget_set_parent (widget, GTK_WIDGET (container));
-
-      if (GTK_WIDGET_VISIBLE (widget->parent))
-       {
-         if (GTK_WIDGET_REALIZED (widget->parent) &&
-             !GTK_WIDGET_REALIZED (widget))
-           gtk_widget_realize (widget);
-
-         if (GTK_WIDGET_MAPPED (widget->parent) &&
-             !GTK_WIDGET_MAPPED (widget))
-           gtk_widget_map (widget);
-       }
-
-      button->child = widget;
+  if (GTK_CONTAINER_CLASS (parent_class)->add)
+    GTK_CONTAINER_CLASS (parent_class)->add (container, widget);
 
-      if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (container))
-       gtk_widget_queue_resize (widget);
-    }
+  GTK_BUTTON (container)->child = GTK_BIN (container)->child;
 }
 
 static void
 gtk_button_remove (GtkContainer *container,
                   GtkWidget    *widget)
 {
-  GtkButton *button;
-
   g_return_if_fail (container != NULL);
-  g_return_if_fail (GTK_IS_BUTTON (container));
   g_return_if_fail (widget != NULL);
 
-  button = GTK_BUTTON (container);
-
-  if (button->child == widget)
-    {
-      gboolean widget_was_visible = GTK_WIDGET_VISIBLE(widget);
-
-      gtk_widget_unparent (widget);
-
-      button->child = NULL;
-
-      if (widget_was_visible && GTK_WIDGET_VISIBLE (container))
-       gtk_widget_queue_resize (GTK_WIDGET (container));
-
-    }
-}
-
-static void
-gtk_button_foreach (GtkContainer *container,
-                   GtkCallback   callback,
-                   gpointer      callback_data)
-{
-  GtkButton *button;
-
-  g_return_if_fail (container != NULL);
-  g_return_if_fail (GTK_IS_BUTTON (container));
-  g_return_if_fail (callback != NULL);
-
-  button = GTK_BUTTON (container);
+  if (GTK_CONTAINER_CLASS (parent_class)->remove)
+    GTK_CONTAINER_CLASS (parent_class)->remove (container, widget);
 
-  if (button->child)
-    (* callback) (button->child, callback_data);
+  GTK_BUTTON (container)->child = GTK_BIN (container)->child;
 }
 
 static void
index 0a74aba7fd2df7d8698472cf05fc89d3d244354f..44f6bde65cb5a5f5bd9be22411bb890a2a6f5d51 100644 (file)
@@ -21,7 +21,7 @@
 
 
 #include <gdk/gdk.h>
-#include <gtk/gtkcontainer.h>
+#include <gtk/gtkbin.h>
 #include <gtk/gtkenums.h>
 
 
@@ -42,9 +42,11 @@ typedef struct _GtkButtonClass  GtkButtonClass;
 
 struct _GtkButton
 {
-  GtkContainer container;
+  GtkBin bin;
 
-  GtkWidget *child;
+  GtkWidget *child /* deprecapted field,
+                   * use GTK_BIN (button)->child instead
+                   */;
 
   guint in_button : 1;
   guint button_down : 1;
@@ -53,7 +55,7 @@ struct _GtkButton
 
 struct _GtkButtonClass
 {
-  GtkContainerClass parent_class;
+  GtkBinClass        parent_class;
   
   void (* pressed)  (GtkButton *button);
   void (* released) (GtkButton *button);
index 38bc73b824758a5eae82dc6a8c7a89c33c894466..8b863a8b80f2890d20c8804fd8da516f2e6a2966 100644 (file)
@@ -141,9 +141,9 @@ gtk_check_button_draw (GtkWidget    *widget,
 
          gtk_check_button_draw_indicator (check_button, area);
 
-         if (button->child && GTK_WIDGET_NO_WINDOW (button->child) &&
-             gtk_widget_intersect (button->child, area, &child_area))
-           gtk_widget_draw (button->child, &child_area);
+         if (GTK_BIN (button)->child && GTK_WIDGET_NO_WINDOW (GTK_BIN (button)->child) &&
+             gtk_widget_intersect (GTK_BIN (button)->child, area, &child_area))
+           gtk_widget_draw (GTK_BIN (button)->child, &child_area);
 
          gtk_widget_draw_focus (widget);
        }
@@ -245,7 +245,7 @@ gtk_check_button_size_allocate (GtkWidget     *widget,
 
       button = GTK_BUTTON (widget);
 
-      if (button->child && GTK_WIDGET_VISIBLE (button->child))
+      if (GTK_BIN (button)->child && GTK_WIDGET_VISIBLE (GTK_BIN (button)->child))
        {
          child_allocation.x = (GTK_CONTAINER (widget)->border_width +
                                CHECK_BUTTON_CLASS (widget)->indicator_size +
@@ -255,7 +255,7 @@ gtk_check_button_size_allocate (GtkWidget     *widget,
                                    GTK_CONTAINER (widget)->border_width - 1);
          child_allocation.height = MAX (1, allocation->height - child_allocation.y * 2);
 
-         gtk_widget_size_allocate (button->child, &child_allocation);
+         gtk_widget_size_allocate (GTK_BIN (button)->child, &child_allocation);
        }
     }
   else
@@ -288,9 +288,9 @@ gtk_check_button_expose (GtkWidget      *widget,
          gtk_check_button_draw_indicator (check_button, &event->area);
 
          child_event = *event;
-         if (button->child && GTK_WIDGET_NO_WINDOW (button->child) &&
-             gtk_widget_intersect (button->child, &event->area, &child_event.area))
-           gtk_widget_event (button->child, (GdkEvent*) &child_event);
+         if (GTK_BIN (button)->child && GTK_WIDGET_NO_WINDOW (GTK_BIN (button)->child) &&
+             gtk_widget_intersect (GTK_BIN (button)->child, &event->area, &child_event.area))
+           gtk_widget_event (GTK_BIN (button)->child, (GdkEvent*) &child_event);
 
          gtk_widget_draw_focus (widget);
        }
index 4505ea7087ed847ab4932dacc9644f279b6a3abc..99674ee2c21cd50a16ee6f9d477f35fb9985749d 100644 (file)
@@ -686,7 +686,7 @@ gtk_clist_set_column_title (GtkCList * clist,
   column_title_new (clist, column, title);
 
   /* remove and destroy the old widget */
-  old_widget = GTK_BUTTON (clist->column[column].button)->child;
+  old_widget = GTK_BIN (clist->column[column].button)->child;
   if (old_widget)
     gtk_container_remove (GTK_CONTAINER (clist->column[column].button), old_widget);
 
@@ -746,7 +746,7 @@ gtk_clist_set_column_widget (GtkCList * clist,
   column_title_new (clist, column, NULL);
 
   /* remove and destroy the old widget */
-  old_widget = GTK_BUTTON (clist->column[column].button)->child;
+  old_widget = GTK_BIN (clist->column[column].button)->child;
   if (old_widget)
     gtk_container_remove (GTK_CONTAINER (clist->column[column].button), old_widget);
 
@@ -781,7 +781,7 @@ gtk_clist_set_column_justification (GtkCList * clist,
    * custom widget */
   if (clist->column[column].title)
     {
-      alignment = GTK_BUTTON (clist->column[column].button)->child;
+      alignment = GTK_BIN (clist->column[column].button)->child;
 
       switch (clist->column[column].justification)
        {
index 7a713242e6dc322b14d6ad46083882caae9c5a6d..9a29d5e176188dd4ba4e4130bcfcc6d0cd0a5f65 100644 (file)
@@ -295,7 +295,7 @@ gtk_option_menu_size_allocate (GtkWidget     *widget,
                            allocation->x, allocation->y,
                            allocation->width, allocation->height);
 
-  child = GTK_BUTTON (widget)->child;
+  child = GTK_BIN (widget)->child;
   if (child && GTK_WIDGET_VISIBLE (child))
     {
       child_allocation.x = (GTK_CONTAINER (widget)->border_width +
@@ -369,7 +369,7 @@ gtk_option_menu_draw (GtkWidget    *widget,
     {
       gtk_option_menu_paint (widget, area);
 
-      child = GTK_BUTTON (widget)->child;
+      child = GTK_BIN (widget)->child;
       if (child && gtk_widget_intersect (child, area, &child_area))
        gtk_widget_draw (child, &child_area);
     }
@@ -427,7 +427,7 @@ gtk_option_menu_expose (GtkWidget      *widget,
        gtk_option_menu_remove_contents (GTK_OPTION_MENU (widget));
 #else
       remove_child = FALSE;
-      child = GTK_BUTTON (widget)->child;
+      child = GTK_BIN (widget)->child;
       child_event = *event;
       if (child && GTK_WIDGET_NO_WINDOW (child) &&
          gtk_widget_intersect (child, &event->area, &child_event.area))
@@ -493,9 +493,9 @@ gtk_option_menu_update_contents (GtkOptionMenu *option_menu)
          if (child)
            {
              gtk_container_block_resize (GTK_CONTAINER (option_menu));
-             if (GTK_BUTTON (option_menu)->child)
+             if (GTK_BIN (option_menu)->child)
                gtk_container_remove (GTK_CONTAINER (option_menu),
-                                     GTK_BUTTON (option_menu)->child);
+                                     GTK_BIN (option_menu)->child);
              if (GTK_WIDGET (option_menu)->state != child->state)
                gtk_widget_set_state (child, GTK_WIDGET (option_menu)->state);
              gtk_widget_reparent (child, GTK_WIDGET (option_menu));
@@ -518,13 +518,13 @@ gtk_option_menu_remove_contents (GtkOptionMenu *option_menu)
   g_return_if_fail (option_menu != NULL);
   g_return_if_fail (GTK_IS_OPTION_MENU (option_menu));
 
-  if (GTK_BUTTON (option_menu)->child)
+  if (GTK_BIN (option_menu)->child)
     {
       gtk_container_block_resize (GTK_CONTAINER (option_menu));
-      if (GTK_WIDGET (option_menu->menu_item)->state != GTK_BUTTON (option_menu)->child->state)
-       gtk_widget_set_state (GTK_BUTTON (option_menu)->child,
+      if (GTK_WIDGET (option_menu->menu_item)->state != GTK_BIN (option_menu)->child->state)
+       gtk_widget_set_state (GTK_BIN (option_menu)->child,
                              GTK_WIDGET (option_menu->menu_item)->state);
-      gtk_widget_reparent (GTK_BUTTON (option_menu)->child, option_menu->menu_item);
+      gtk_widget_reparent (GTK_BIN (option_menu)->child, option_menu->menu_item);
       gtk_widget_unref (option_menu->menu_item);
       option_menu->menu_item = NULL;
       gtk_container_unblock_resize (GTK_CONTAINER (option_menu));